//
//  FinAuthLivePEV5DetectConfig.h
//  FinAuthLiveV5Detect
//
//  Created by FinAuthDev on 2024/2/16.
//

#ifndef FinAuthLivePEV5DetectConfig_h
#define FinAuthLivePEV5DetectConfig_h
@class FinAuthLivePEV5DetectError;

//  活体检测集成方式，默认值为`FinAuthLivePEV5DetectModel_A`
typedef enum : NSUInteger {
    FinAuthLivePEV5DetectModel_A           =  1,  //  默认集成方式，在SDK内部进行配置的网络请求。需要配合指定HostURL使用
    FinAuthLivePEV5DetectModel_B           =  2,  //  集成方式B。SDK内部将请求配置的数据传给客户，客户进行网络请求后将配置数据回传给SDK
} FinAuthLivePEV5DetectModel;

//  活体检测语言类型，默认值为`FinAuthLivePEV5DetectLanguageTypeCh`
typedef enum : NSUInteger {
    FinAuthLivePEV5DetectLanguageTypeCh           =  0,  //  中文
    FinAuthLivePEV5DetectLanguageTypeEn           =  1,  //  英文
} FinAuthLivePEV5DetectLanguageType;

//  活体检测设备垂直检测类型，默认值为`FinAuthLivePEV5DetectPhoneVerticalTypeDisable`
typedef enum : NSUInteger {
    FinAuthLivePEV5DetectPhoneVerticalTypeContinue          =  1,  //  启用设备垂直检测
    FinAuthLivePEV5DetectPhoneVerticalTypeFront2            =  2,  //  仅在检测开启的2秒内启用，之后关闭该功能
    FinAuthLivePEV5DetectPhoneVerticalTypeDisable           =  3,  //  禁用设备垂直检测
} FinAuthLivePEV5DetectPhoneVerticalType;

//  活体检测提示UI效果类型，默认值为`FinAuthLivePEV5DetectRemindUITypeDefault`
typedef enum : NSUInteger {
    FinAuthLivePEV5DetectRemindUITypeDefault                =  0,  //  提示效果一行模式
    FinAuthLivePEV5DetectRemindUITypeMultipleLine           =  1,  //  提示效果多行模式，最多支持三行
} FinAuthLivePEV5DetectRemindUIType;

//  活体检测错误类型
typedef enum : NSUInteger {
    FinAuthLivePEV5DetectErrorTypeOK                                = 1000,
    FinAuthLivePEV5DetectErrorTypeBizTokenDenied                    = 1001,
    FinAuthLivePEV5DetectErrorTypeIllegalParameter                  = 1002,
    FinAuthLivePEV5DetectErrorTypeAuthenticationFail                = 1003,
    FinAuthLivePEV5DetectErrorTypeMobileNotSupport                  = 1004,
    FinAuthLivePEV5DetectErrorTypeNullPointException                = 1005,
    FinAuthLivePEV5DetectErrorTypeRequestFrequently                 = 1006,
    FinAuthLivePEV5DetectErrorTypeNetworkTimeout                    = 1007,
    FinAuthLivePEV5DetectErrorTypeInternalError                     = 1008,
    FinAuthLivePEV5DetectErrorTypeInvalidBundleID                   = 1009,
    FinAuthLivePEV5DetectErrorTypeNetworkError                      = 1010,
    FinAuthLivePEV5DetectErrorTypeUserCancel                        = 1011,
    FinAuthLivePEV5DetectErrorTypeNoCameraPermission                = 1012,
    FinAuthLivePEV5DetectErrorTypeNoCameraSupport                   = 1013,
    FinAuthLivePEV5DetectErrorTypeFaceInitFail                      = 1014,
    FinAuthLivePEV5DetectErrorTypeLivenessFailure                   = 1016,
    FinAuthLivePEV5DetectErrorTypeGotoBackground                    = 1017,
    FinAuthLivePEV5DetectErrorTypeLivenessTimeout                   = 1018,
    FinAuthLivePEV5DetectErrorTypeDataUploadFail                    = 1019,
    FinAuthLivePEV5DetectErrorTypeNFCUserQuit                       = 1020,
    FinAuthLivePEV5DetectErrorTypeNFCSystemQuit                     = 1021,
    FinAuthLivePEV5DetectErrorTypeScreenNoSupport                   = 1022,
    FinAuthLivePEV5DetectErrorTypeScreenNoPermission                = 1023,
    FinAuthLivePEV5DetectErrorTypeScreenRecordFail                  = 1024,
    FinAuthLivePEV5DetectErrorTypeScreenWriteFail                   = 1025,
    FinAuthLivePEV5DetectErrorTypeNoAudioPremission                 = 1026,
    FinAuthLivePEV5DetectErrorTypeVideoRecordFail                   = 1027,
} FinAuthLivePEV5DetectErrorType;

/**
 FinAuth活体检测配置接口管理器加载状态Block。
 */
typedef void(^FinAuthLivePEV5StartDetectBlock)(FinAuthLivePEV5DetectError* error, NSDictionary* extraOutDict);
/**
 FinAuth活体检测配置接口检测完成时Block。该阶段，仅代表检测完成，进行数据回传。检测页面未开始收起。
 */
typedef void(^FinAuthLivePEV5EndDetectBlock)(FinAuthLivePEV5DetectError* error, NSString* bizTokenStr, NSData* deltaData, NSDictionary* extraOutDict);
/**
 FinAuth活体检测配置接口页面收起完成时Block。
 */
typedef void(^FinAuthLivePEV5DismissBlock)(void);

/**
 FinAuth活体检测配置接口响应Block。该参数仅在集成方案B时有效。请在默认线程或者非主线程中调用该block。回到主线程中调用该block，会导致网络卡顿，直到超时。
 */
typedef void(^FinAuthLivePEV5ConfigResponseBlock)(NSDictionary* responseDict);

/**
 FinAuth活体检测配置接口请求Block。该参数仅在集成方案B时有效。该block内部为子线程。如果需要进行UI操作，请手动回到主线程。
 */
typedef void(^FinAuthLivePEV5ConfigBlock)(NSString* bizToken, NSDictionary* requestDict, FinAuthLivePEV5ConfigResponseBlock responseBlock);


#endif /* FinAuthLivePEV5DetectConfig_h */
